#ifndef __SISTEMA_H_INCLUDED__
#define __SISTEMA_H_INCLUDED__

#include <map>
#include <string>
#include <vector>
#include <list>

#include "Evento.h"
#include "Transaccion.h"
#include "Bloque.h"

class Sistema{
private:
     static Sistema sistema;

     uint64_t terminados;
     
     uint64_t C1, AC1;
     std::map<std::string, double> saveValues;
     std::list<Evento*> FEC;
     std::list<Transaccion*> CEC;
     std::vector<Bloque*> bloques;
     // std::map<std::string, Facility*> facilities;
     // std::map<std::string, Queue*> queues;
     // std::map<std::string, Storage*> storages;
     // std::map<std::string, Cadena*> cadenas;

     Sistema();

public:
     static Sistema& getInstancia();
     void ponerEnFEC(Evento* ev);
     void ponerEnCEC(Transaccion* t);
     Bloque* getBloque(uint64_t numero){ return bloques[numero]; }
     void incrementarContador(uint64_t cantidad){ terminados+= cantidad;}
     void reset(){ C1=0; terminados=0;}
     double getSaveValue(const std::string& nombre);
     void start(uint64_t cantidad);
     void parsear(const std::string& buffer);
};

#endif //__SISTEMA_H_INCLUDED__
